import axios from "axios";
import axiosAdapterUniapp from 'axios-adapter-uniapp';

// 配置目标URL和超时时间
const targetUrl = 'http://u8488969.natappfree.cc/api'; // 实际的域名
// const targetUrl = 'http://192.168.184.143:8080/api';  // 虚拟机
let loadingCount = 0;
// 确保正确导出 targetUrl
export {
	targetUrl
}
const timeout = 5000;
// 设置默认请求头
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';

// 创建 axios 实例
const service = axios.create({
	baseURL: targetUrl,
	timeout: 5000,
	adapter: axiosAdapterUniapp
});

// 取消令牌源
let cancelTokenSource = axios.CancelToken.source();

// 设置请求拦截器
service.interceptors.request.use((config) => {
	showLoading();
	// 放置 token
	// config.headers['Authorization'] = 'Bearer ' + localStorage.getItem("token");

	// 设置取消令牌
	config.cancelToken = cancelTokenSource.token;
	return config;
});

// 设置响应拦截器
service.interceptors.response.use(
	(response) => {
		hideLoading()
		const res = response.data;
		if (res.code === 200) {
			return res;
		} else {
			// wx.showToast({
			// 	icon: "none",
			// 	title: res.msg
			// });
			return null;
		}
	},
	(error) => {
		wx.hideLoading();
		// 检查是否是取消请求的错误
		if (axios.isCancel(error)) {
			console.error('请求被取消:', error.message);
		} else {
			// wx.showToast({
			// 	icon: "error",
			// 	title: error.response.data.msg
			// });
			// 处理其他错误
			console.error('请求错误:', error.response ? error.response.data : error.message);
		}
		return Promise.reject(error); // 使请求链继续，reject 错误
	}
);

/**
 * 请求方法
 * @param {url:请求地址, method:请求方法, params:请求参数}
 * @type Object
 * @returns res
 */
export const request = ({
	url,
	method,
	params
}) => {
	if (method === "GET") {
		// 拼接 get 请求
		if (params) {
			url += "?" + splicingParams(params);
		}
		return service.get(url);
	} else if (method === "POST") {
		return service.post(url, params);
	} else {
		console.error("未知方法：" + method);
	}
};

// 拼接 URL 参数
const splicingParams = function(obj) {
	const arr = Object.entries(obj);
	let str = "";
	for (const [key, value] of arr) {
		str += `${key}=${value}&`;
	}
	str = str.substring(0, str.length - 1);
	return str;
};

//开启请求loading
function showLoading() {
	loadingCount++;
	if (loadingCount > 0) {
		wx.showLoading({
			title: "加载中"
		})
	}
}
//关闭请求loading
function hideLoading() {
	loadingCount--;
	if (loadingCount === 0) {
		wx.hideLoading()
	}
}
export default request;